Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


.github/workflows/android-build.yml 500818941d24900ea4a7b3d48f95a639e68e320d (50081894) Text, 13.67 KB

T8b949e# Android APK build (debug + optional release) for branches, PRs, and manual runs.
T8b949e# Tagged APKs attached to GitHub Releases are built in build-release.yml (android-apk-tag.yml).
T8b949e#
T8b949e# Pinned first-party actions (bump tag and SHA together when upgrading):
T8b949e# actions/checkout@v6.0.1 8e8c483db84b4bee98b60c0593521ed34d9990e8
T8b949e# actions/setup-python@v6.2.0 a309ff8b426b58ec0e2a45f0f869d46889d02405
T8b949e# actions/setup-java@v4.7.1 c5195efecf7bdfc987ee8bae7a71cb8b11521c00
T8b949e# actions/upload-artifact@v5.0.0 330a01c490aca151604b8cf639adc76d48f6c5d4
T8b949e# actions/download-artifact@v5.0.0 634f93cb2916e3fdff6788551b99b062d0335ce0

Tff7b72nameTb4b4b4: Ta5d6ffAndroidTa5d6ff Ta5d6ffbuild

Tff7b72onTb4b4b4:
Tff7b72pull_requestTb4b4b4:
Tff7b72branchesTb4b4b4:
Tb4b4b4- Ta5d6ffdev
Tff7b72pushTb4b4b4:
Tff7b72branchesTb4b4b4:
Tb4b4b4- Ta5d6ffdev
Tff7b72workflow_dispatchTb4b4b4:
Tff7b72inputsTb4b4b4:
Tff7b72build_releaseTb4b4b4:
Tff7b72descriptionTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffsigned/optimizedTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffAPKTa5d6ff Ta5d6ffartifacts
Tff7b72requiredTb4b4b4: Ta5d6fftrue
Tff7b72typeTb4b4b4: Ta5d6ffboolean
Tff7b72defaultTb4b4b4: Ta5d6fftrue
Tff7b72run_testsTb4b4b4:
Tff7b72descriptionTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffunitTa5d6ff Ta5d6fftests
Tff7b72requiredTb4b4b4: Ta5d6fftrue
Tff7b72typeTb4b4b4: Ta5d6ffboolean
Tff7b72defaultTb4b4b4: Ta5d6fftrue

Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffread
Tff7b72actionsTb4b4b4: Ta5d6ffwrite

Tff7b72concurrencyTb4b4b4:
Tff7b72groupTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.workflowTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.refTa5d6ff Ta5d6ff}}
Tff7b72cancel-in-progressTb4b4b4: Ta5d6fftrue

Tff7b72envTb4b4b4:
Tff7b72FORCE_JAVASCRIPT_ACTIONS_TO_NODE24Tb4b4b4: Ta5d6fftrue
Tff7b72NODE_OPTIONSTb4b4b4: Ta5d6ff--max-old-space-size=8192
Tff7b72NODE_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff24Ta5d6ff"
Tff7b72PNPM_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff10.32.1Ta5d6ff"
Tff7b72PYTHON_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff3.11Ta5d6ff"
Tff7b72JAVA_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff17Ta5d6ff"
Tff7b72CHAQUOPY_REFTb4b4b4: Ta5d6ff"Ta5d6ff9f563f45108a873d7feb363e1f754c0173f1114eTa5d6ff"

Tff7b72jobsTb4b4b4:
Tff7b72frontendTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifact
Tff7b72usesTb4b4b4: Ta5d6ff./.github/workflows/frontend-build.yml
Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffread
Tff7b72withTb4b4b4:
Tff7b72artifact_nameTb4b4b4: Ta5d6ffmeshchatx-frontend-android-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_attemptTa5d6ff Ta5d6ff}}
Tff7b72retention_daysTb4b4b4: Ta5d6ff1
T8b949e# Android wheels run on Python 3.11; using the same here avoids
T8b949e# spurious version drift in the docs-bundling step.
Tff7b72python_versionTb4b4b4: Ta5d6ff"Ta5d6ff3.11Ta5d6ff"

Tff7b72androidTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffAndroidTa5d6ff Ta5d6fftest/build
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-latest
Tff7b72needsTb4b4b4: Ta5d6fffrontend
Tff7b72timeout-minutesTb4b4b4: Ta5d6ff90
Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffwrite
Tff7b72actionsTb4b4b4: Ta5d6ffwrite
Tff7b72defaultsTb4b4b4:
Tff7b72runTb4b4b4:
Tff7b72shellTb4b4b4: Ta5d6ffbash
Tff7b72envTb4b4b4:
Tff7b72FRONTEND_ARTIFACT_NAMETb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffneeds.frontend.outputs.artifact_nameTa5d6ff Ta5d6ff}}
Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckout
Tff7b72usesTb4b4b4: Ta5d6ffactions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
Tff7b72withTb4b4b4:
Tff7b72fetch-depthTb4b4b4: Ta5d6ff0

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffResolveTa5d6ff Ta5d6fftagTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6fftrack
Tff7b72idTb4b4b4: Ta5d6fftrack
Tff7b72ifTb4b4b4: Ta5d6ffgithub.ref_typeTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'tag'
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72git fetch --no-tags origin dev master
Tff7b72sha="$(git rev-parse HEAD)"
Tff7b72on_m=false
Tff7b72on_d=false
Tff7b72while IFS= read -r line; do
Tff7b72ref="$(printf '%s' "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
Tff7b72case "$ref" in
Tff7b72origin/master) on_m=true ;;
Tff7b72origin/dev) on_d=true ;;
Tff7b72esac
Tff7b72done < <(git branch -r --contains "${sha}")
Tff7b72if [[ "${on_m}" == true ]]; then
Tff7b72track=master
Tff7b72elif [[ "${on_d}" == true ]]; then
Tff7b72track=dev
Tff7b72else
Tff7b72track=none
Tff7b72fi
Tff7b72echo "track=${track}" >> "${GITHUB_OUTPUT}"
Tff7b72echo "Resolved tag ${GITHUB_REF_NAME} -> track=${track}"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDetectTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffsigningTa5d6ff Ta5d6ffsecrets
Tff7b72idTb4b4b4: Ta5d6ffandroid_signing
Tff7b72envTb4b4b4:
Tff7b72KS_B64Tb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_BASE64Ta5d6ff Ta5d6ff}}
Tff7b72KS_PASSTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_PASSWORDTa5d6ff Ta5d6ff}}
Tff7b72KS_ALIASTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEY_ALIASTa5d6ff Ta5d6ff}}
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72if [[ -n "${KS_B64}" && -n "${KS_PASS}" && -n "${KS_ALIAS}" ]]; then
Tff7b72echo "ready=true" >> "${GITHUB_OUTPUT}"
Tff7b72else
Tff7b72echo "ready=false" >> "${GITHUB_OUTPUT}"
Tff7b72fi

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffRequireTa5d6ff Ta5d6ffsigningTa5d6ff Ta5d6ffsecretsTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffdevTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffmasterTa5d6ff Ta5d6fftagTa5d6ff Ta5d6ffbuilds
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.ref_typeTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff(steps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'dev')Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ffsteps.android_signing.outputs.readyTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'true'Ta5d6ff Ta5d6ff}}
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72echo "::error::Tagged dev (RC) and master builds need release signing. Set secrets ANDROID_SIGNING_KEYSTORE_BASE64, ANDROID_SIGNING_KEYSTORE_PASSWORD, and ANDROID_SIGNING_KEY_ALIAS (see workflow header)."
Tff7b72exit 1

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetTa5d6ff Ta5d6ffupTa5d6ff Ta5d6ffJava
Tff7b72usesTb4b4b4: Ta5d6ffactions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00
Tff7b72withTb4b4b4:
Tff7b72distributionTb4b4b4: Ta5d6fftemurin
Tff7b72java-versionTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.JAVA_VERSIONTa5d6ff Ta5d6ff}}
Tff7b72cacheTb4b4b4: Ta5d6ffgradle
Tff7b72cache-dependency-pathTb4b4b4: Tb4b4b4|
Tff7b72android/build.gradle
Tff7b72android/settings.gradle
Tff7b72android/app/build.gradle

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetTa5d6ff Ta5d6ffupTa5d6ff Ta5d6ffPython
Tff7b72usesTb4b4b4: Ta5d6ffactions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
Tff7b72withTb4b4b4:
Tff7b72python-versionTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.PYTHON_VERSIONTa5d6ff Ta5d6ff}}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDownloadTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifact
Tff7b72usesTb4b4b4: Ta5d6ffactions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.FRONTEND_ARTIFACT_NAMETa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffmeshchatx/public

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffVerifyTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifactTa5d6ff Ta5d6ffcontents
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72test -f meshchatx/public/index.html
Tff7b72test -d meshchatx/public/assets
Tff7b72test -d meshchatx/public/reticulum-docs-bundled/current

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ffdependencies
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72sudo apt-get update
Tff7b72sudo apt-get install -y build-essential cmake pkg-config patchelf

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffRustTa5d6ff Ta5d6fftoolchain
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72curl -sSfL https://sh.rustup.rs -o rustup-init.sh
Tff7b72chmod +x rustup-init.sh
Tff7b72./rustup-init.sh -y --profile minimal --default-toolchain stable
Tff7b72echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffNDKTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffChaquopyTa5d6ff Ta5d6ffnativeTa5d6ff Ta5d6ffwheels
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME:-/usr/local/lib/android/sdk}}"
Tff7b72SDKMANAGER="${SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager"
Tff7b72if [[ ! -x "${SDKMANAGER}" ]]; then
Tff7b72echo "Expected preinstalled sdkmanager at ${SDKMANAGER}" >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72NDK_VERSION="27.3.13750724"
Tff7b72yes_n() { for _ in $(seq 1 "$1"); do echo y; done; }
Tff7b72if [[ ! -d "${SDK_ROOT}/ndk/${NDK_VERSION}" ]]; then
Tff7b72yes_n 200 | "${SDKMANAGER}" --sdk_root="${SDK_ROOT}" --licenses >/dev/null
Tff7b72yes_n 50 | "${SDKMANAGER}" --sdk_root="${SDK_ROOT}" "ndk;${NDK_VERSION}" >/dev/null
Tff7b72fi
Tff7b72{
Tff7b72echo "ANDROID_HOME=${SDK_ROOT}"
Tff7b72echo "ANDROID_SDK_ROOT=${SDK_ROOT}"
Tff7b72} >> "${GITHUB_ENV}"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheels
Tff7b72runTb4b4b4: Ta5d6ffbashTa5d6ff Ta5d6ffscripts/build-android-wheels-local.shTa5d6ff Ta5d6ff--python-minorTa5d6ff Ta5d6ff"${PYTHON_VERSION}"Ta5d6ff Ta5d6ff--chaquopy-refTa5d6ff Ta5d6ff"${CHAQUOPY_REF}"Ta5d6ff Ta5d6ff--abisTa5d6ff Ta5d6ffarm64-v8a,x86_64,armeabi-v7a

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffMeshChatXTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffrepositoryTa5d6ff Ta5d6ffbundle
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72python -m pip install -U pip build
Tff7b72python -m build --wheel -o dist .

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffVerifyTa5d6ff Ta5d6ffrequiredTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheelsTa5d6ff Ta5d6ffareTa5d6ff Ta5d6ffpresent
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72required=(
Tff7b72"miniaudio-1.70-*-cp311-cp311-android_24_arm64_v8a.whl"
Tff7b72"miniaudio-1.70-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"miniaudio-1.70-*-cp311-cp311-android_24_armeabi_v7a.whl"
Tff7b72"pycodec2-*-cp311-cp311-android_24_arm64_v8a.whl"
Tff7b72"pycodec2-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"pycodec2-*-cp311-cp311-android_24_armeabi_v7a.whl"
Tff7b72"lxst-*-py3-none-any.whl"
Tff7b72"bleak-*-py3-none-any.whl"
Tff7b72)
Tff7b72missing=0
Tff7b72for pattern in "${required[@]}"; do
Tff7b72if ! ls android/vendor/${pattern} >/dev/null 2>&1; then
Tff7b72echo "::error::Missing wheel matching android/vendor/${pattern}"
Tff7b72missing=1
Tff7b72fi
Tff7b72done
Tff7b72if [[ "${missing}" -ne 0 ]]; then
Tff7b72echo "Built wheels:"
Tff7b72ls -la android/vendor/ || true
Tff7b72exit 1
Tff7b72fi
Tff7b72echo "All required Android wheels present:"
Tff7b72ls -1 android/vendor/

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffunitTa5d6ff Ta5d6fftests
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event_nameTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'workflow_dispatch'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffinputs.run_testsTa5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:testDebugUnitTest

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffLint
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event_nameTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'workflow_dispatch'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffinputs.run_testsTa5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:lintDebug

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffdebugTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.ref_typeTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:assembleDebug

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ff(github.ref_typeTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff(steps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'dev'))Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ff(github.ref_typeTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff(github.event_nameTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'workflow_dispatch'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffinputs.build_release))Ta5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:assembleRelease

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSignTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffAPKs
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.ref_typeTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff(steps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'dev')Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ffsteps.android_signing.outputs.readyTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'true'Ta5d6ff Ta5d6ff}}
Tff7b72envTb4b4b4:
Tff7b72KS_B64Tb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_BASE64Ta5d6ff Ta5d6ff}}
Tff7b72SIGNING_KEYSTORE_PATHTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffrunner.tempTa5d6ff Ta5d6ff}}/meshchatx-release.jks
Tff7b72SIGNING_KEY_ALIASTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEY_ALIASTa5d6ff Ta5d6ff}}
Tff7b72SIGNING_KEYSTORE_PASSWORDTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_PASSWORDTa5d6ff Ta5d6ff}}
Tff7b72SIGNING_KEY_PASSWORDTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEY_PASSWORDTa5d6ff Ta5d6ff}}
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72printf '%s' "${KS_B64}" | base64 -d > "${SIGNING_KEYSTORE_PATH}"
Tff7b72export SIGNING_KEYSTORE_PATH SIGNING_KEY_ALIAS SIGNING_KEYSTORE_PASSWORD
Tff7b72export SIGNING_KEY_PASSWORD="${SIGNING_KEY_PASSWORD:-${SIGNING_KEYSTORE_PASSWORD}}"
Tff7b72bash scripts/sign-android-apks.sh

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffwheels
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffandroid-wheels-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid/vendor/*.whl
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffdebugTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.ref_typeTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-debug-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid/app/build/outputs/apk/debug/*.apk
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ffreports
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event_nameTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'workflow_dispatch'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffinputs.run_testsTa5d6ff Ta5d6ff}}
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-tests-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Tb4b4b4|
Tff7b72android/app/build/reports/tests/
Tff7b72android/app/build/test-results/
Tff7b72android/app/build/reports/lint-results-debug.html
Tff7b72android/app/build/reports/lint-results-debug.xml
Tff7b72if-no-files-foundTb4b4b4: Ta5d6ffwarn

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ff(github.ref_typeTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff(steps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'dev'))Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ff(github.ref_typeTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'tag'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff(github.event_nameTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'workflow_dispatch'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffinputs.build_release))Ta5d6ff Ta5d6ff}}
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-release-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid/app/build/outputs/apk/release/*.apk
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────